package com.lcf.system.manager;

import com.baomidou.mybatisplus.extension.toolkit.Db;
import com.lcf.framework.exception.SysException;
import com.lcf.system.dto.menu.SysMenuDTO;
import com.lcf.system.entity.SysMenu;
import com.lcf.system.entity.SysRoleMenu;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * 描述：菜单通用业务方法
 *
 * @author lcf
 * @since 2025/2/28 14:21
 */
@Component
public class SysMenuManager {
    /**
     * 根据菜单查询角色
     */
    public List<Long> getRoleIdsByMenuId(long menuId) {
        return Db.lambdaQuery(SysRoleMenu.class)
                .select(SysRoleMenu::getRoleId)
                .eq(SysRoleMenu::getMenuId, menuId)
                .list()
                .stream()
                .map(SysRoleMenu::getRoleId)
                .toList();
    }

    /**
     * 检查菜单是否已存在
     */
    public void checkExist(Long id, SysMenuDTO dto) {
        boolean exists = Db.lambdaQuery(SysMenu.class)
                .eq(SysMenu::getMenuName, dto.getMenuName())
                .eq(SysMenu::getMenuType, dto.getMenuType())
                .eq(SysMenu::getParentId, dto.getParentId())
                .eq(SysMenu::getMenuCode, dto.getMenuCode())
                .ne(id != null, SysMenu::getId, id)
                .exists();

        if (exists) {
            throw new SysException("菜单已存在!");
        }
    }

    /**
     * 检查id
     */
    public void checkId(long id) {
        SysMenu sysMenu = Db.lambdaQuery(SysMenu.class).eq(SysMenu::getId, id).one();
        if (sysMenu == null) {
            throw new SysException("菜单不存在");
        }
    }
}
